package com.ruoyi.system.service.impl;

import java.util.List;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.domain.vo.TemplateTableRelVo;
import com.ruoyi.system.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.TemplateTableRelMapper;

import javax.annotation.Resource;

/**
 * 业务模板-业务数据关联Service业务层处理
 *
 * @author chenming
 * @date 2024-10-16
 */
@Service
public class TemplateTableRelServiceImpl extends ServiceImpl<TemplateTableRelMapper, TemplateTableRel> implements ITemplateTableRelService
{
    @Resource
    private TemplateTableRelMapper templateTableRelMapper;

    @Resource
    private ITemplateDataService templateDataService;

    @Resource
    private ITemplateFieldDataService templateFieldDataService;

    @Resource
    private ITableDataService tableDataService;

    @Resource
    private IFieldDataService fieldDataService;

    /**
     * 查询业务模板-业务数据关联
     *
     * @param relId 业务模板-业务数据关联主键
     * @return 业务模板-业务数据关联
     */
    @Override
    public TemplateTableRel selectTemplateTableRelByTemplateId(Long relId)
    {
        return templateTableRelMapper.selectTemplateTableRelByTemplateId(relId);
    }

    /**
     * 查询业务模板-业务数据关联列表
     *
     * @param templateTableRel 业务模板-业务数据关联
     * @return 业务模板-业务数据关联
     */
    @Override
    public List<TemplateTableRelVo> selectTemplateTableRelList(TemplateTableRel templateTableRel)
    {
        List<TemplateTableRelVo>  list = templateTableRelMapper.selectTemplateTableRelList(templateTableRel);
        for (TemplateTableRelVo templateTableRelVo : list) {
            TemplateData templateData = templateDataService.selectTemplateDataByTemplateId(templateTableRelVo.getTemplateId());
            TemplateFieldData templateFieldData = templateFieldDataService.selectTemplateFieldDataByFieldId(templateTableRelVo.getTemplateFieldId());
            TableData tableData = tableDataService.selectTableDataByTableId(templateTableRelVo.getTableId());
            FieldData fieldData = fieldDataService.selectFieldDataByFieldId(templateTableRelVo.getTableFieldId());
            templateTableRelVo.setTemplateName(templateData.getTemplateName());
            templateTableRelVo.setFieldName(templateFieldData.getFieldName());
            templateTableRelVo.setTableCnName(tableData.getTableCnName());
            templateTableRelVo.setTableEnName(tableData.getTableEnName());
            templateTableRelVo.setFieldCnName(fieldData.getFieldCnName());
            templateTableRelVo.setFieldEnName(fieldData.getFieldEnName());
        }
        return list;
    }

    /**
     * 新增业务模板-业务数据关联
     *
     * @param templateTableRel 业务模板-业务数据关联
     * @return 结果
     */
    @Override
    public int insertTemplateTableRel(TemplateTableRel templateTableRel)
    {
        return templateTableRelMapper.insertTemplateTableRel(templateTableRel);
    }

    /**
     * 修改业务模板-业务数据关联
     *
     * @param templateTableRel 业务模板-业务数据关联
     * @return 结果
     */
    @Override
    public int updateTemplateTableRel(TemplateTableRel templateTableRel)
    {
        return templateTableRelMapper.updateTemplateTableRel(templateTableRel);
    }

    /**
     * 批量删除业务模板-业务数据关联
     *
     * @param relIds 需要删除的业务模板-业务数据关联主键
     * @return 结果
     */
    @Override
    public int deleteTemplateTableRelByTemplateIds(Long[] relIds)
    {
        return templateTableRelMapper.deleteTemplateTableRelByTemplateIds(relIds);
    }

    /**
     * 删除业务模板-业务数据关联信息
     *
     * @param relId 业务模板-业务数据关联主键
     * @return 结果
     */
    @Override
    public int deleteTemplateTableRelByTemplateId(Long relId)
    {
        return templateTableRelMapper.deleteTemplateTableRelByTemplateId(relId);
    }

    @Override
    public int updateTemRel(List<TemplateTableRel> tableRelList) {
        Long templateId = tableRelList.get(0).getTemplateId(); // 关联模板id
        Long tableId = tableRelList.get(0).getTableId(); // 关联表
        // 清空关联数据
        this.remove(new LambdaQueryWrapper<TemplateTableRel>().eq(TemplateTableRel::getTemplateId, templateId));

        // 插入数据
        tableRelList.forEach(
                this::insertTemplateTableRel
        );

        TemplateData templateData = new TemplateData();
        templateData.setTemplateId(templateId);
        templateData.setTableId(tableId);
        templateDataService.updateById(templateData);
        return tableRelList.size();
    }
}
